using namespace std;

#include "ProductorAcciones.h"

ProductorAcciones::ProductorAcciones(bool atributo) : Thread(atributo){
	this->conexion 	= NULL;
}

ProductorAcciones::~ProductorAcciones() {
	free(this);
}

//Seters
void ProductorAcciones::setConexion(Socket *conexion){
	this->conexion = conexion;
}

//Manejador de señales de interrupcion.
void ProductorAcciones::signalHandler(int signal){
	//Informo la finalizacion por sysout
	cout << "[INFO] - Se cierra el hilo de escucha al jugador." << endl;
	//Cierro el thread.
	pthread_exit(NULL);
}

void ProductorAcciones::run (){
	/* Me attacho a la señal que envia el server para finalizar. */
	signal(SENIAL_FIN_PARTIDA, ProductorAcciones::signalHandler);

	/* Mientras el cliente este activo */
	while (Partida::getInstance()->isActivo()) {
		/* Desencolo la respuesta generada */
		t_accion toSend = Partida::getInstance()->desencolarAccionAEnviar();

		if(!Partida::getInstance()->isStoped())
			if(this->conexion->write(((void *)&toSend), sizeof(toSend), this->conexion->getSocketId()) == -1)
				cout << "[ERROR] - No se pudo enviar una accion a la partida. " << toSend.id_accion <<  endl;

		usleep(SPEED_ENVIAR_ACCION);
	}

	//Cierro el thread.
	pthread_exit(NULL);
}
	
